package com.testing.common;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;

/**
 * @Classname AutoUtils
 * @Description 类型说明
 * @Date 2023/10/12 20:45
 * @Created by 特斯汀Roy
 */
public class AutoUtils {

    /**
     * 所有的类中都可以调用AutoUtils里面的logger来完成日志记录。
     */
    public static Logger log= LogManager.getLogger(AutoUtils.class);

    /************************参数关联类操作**************************/
    //更多变量怎么存
    public static String goods = "VIP14测试商品" + dateStr("ddHHmmss");
    //如果需要在多个地方使用的变量，都存到AutoTools里面，想用的时候从里面拿出来用
    public static Map<String, String> paramMap = new HashMap<>();

    /***
     * 生成时间戳格式字符串的方法
     * @param pattern 时间戳格式
     * @return
     */
    public static String dateStr(String pattern) {
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        String format = sdf.format(new Date());
        return format;
    }

    /**
     * 基于输入的字符串随机取值的方法
     * @param params 可变参数，支持输入多个字符串。
     * @return
     */
    public static String randomString(String... params) {
        //通过随机的下标取值
        Random random = new Random();
        int nextInt = random.nextInt(params.length);
        return params[nextInt];
    }


    /**
     * 用于完成变量存储
     * @param paramName 变量名
     * @param value  变量值
     * @return
     */
    public static boolean saveParam(String paramName, String value) {
        paramMap.put(paramName, value);
        return true;
    }

    /**
     * 如果字符串中有变量就替换，没有就不动它。
     * //进行变量的获取
     * //查找字符串中是否有{变量名}，如果有，就进行替换。
     * //对每个变量名，查找一下，字符串里有没有它，有就替换所有的
     *
     * @param origin
     * @return
     */
    public static String useParam(String origin) {
        for (String key : paramMap.keySet()) {
            origin = origin.replaceAll("\\{" + key + "\\}", paramMap.get(key));
        }
        return origin;
    }

    /***
     * 存储一个拼接时间戳的变量
     * @param paramName
     * @param originStr
     * @param datePattern
     */
    public static void saveDateParam(String paramName, String originStr, String datePattern) {
        String paramvalue = originStr + dateStr(datePattern);
        paramMap.put(paramName, paramvalue);
    }



    /**
     * 通用的线程等待方法。
     *
     * @param seconds 等待秒数，支持小数。
     * @return 方法本身执行是否成功
     */
    public boolean halt(String seconds) {
        try {
            float time = Float.parseFloat(seconds);
            Thread.sleep((int) (time * 1000));
            System.out.println("强制等待"+time+"秒");
            return true;
        } catch (Exception e) {
            System.out.println(e);
            return false;
        }
    }

    public static void runCmd(String cmd) throws IOException {
        log.info("执行命令" + cmd);
        Runtime.getRuntime().exec("cmd /c start " + cmd);
    }


}
